
#pragma once

#if defined(__GNUC__) || defined(__MINGW32__) || defined(__MINGW__)
    #pragma GCC diagnostic push
    #pragma GCC diagnostic ignored "-Weffc++"
    #pragma GCC diagnostic ignored "-Wnon-virtual-dtor"
#endif

namespace tools{

    class Variant;

    namespace variant_detail{

        struct IStep
        {
            typedef V::Str Str;

            virtual bool operator==(const IStep& rhs)const=0;
            virtual IStep& operator=(const IStep& rhs)=0;
            virtual void           Right()=0;
            virtual void           Left()=0;
            virtual const Variant& GetVariant()const=0;
            virtual const Str&     GetKey()const=0;
        };
        enum { eSIZE_BUFF_ITERATORS = sizeof(IStep) };
        typedef Wrapper<IStep, eSIZE_BUFF_ITERATORS> Native;

    }//namespace variant_detail
}//namespace tools

#if defined(__GNUC__) || defined(__MINGW32__) || defined(__MINGW__)
    #pragma GCC diagnostic pop
#endif
